草庐IT

c++ - 如何使用 TBB 多线程 "tail call"递归

我正在尝试使用tbb对现有的递归算法进行多线程处理。单线程版本使用尾调用递归,从结构上看是这样的:voidmy_func(){my_recusive_func(0);}booldoSomeWork(inti,int&a,int&b,int&c){//dosomework}voidmy_recusive_func(inti){inta,b,c;boolnotDone=doSomeWork(i,a,b,c);if(notDone){my_recusive_func(a);my_recusive_func(b);my_recusive_func(c);}}我是一个tbb新手,所以我第一次尝试

c++ - 找不到 tbb.dll

我在opencv2.3中使用cvCanny函数,它编译正常,但在执行时出现错误,提示未找到“tbb.dll”。这个dll有什么用,我在哪里可以找到它??谢谢, 最佳答案 它是英特尔ThreadingBuildingBlocks的一部分图书馆。您可以在您的OpenCV安装中的/build/common/tbb以及您正在使用的平台和编译器下找到它的拷贝。例如,在c:\OpenCV-2.3.1\build\common\tbb\intel64\vc9 关于c++-找不到tbb.dll,我们在S

c++ - 本土工作队列与英特尔 TBB

我们正在考虑为C/C++使用哪个并行框架。我们有一些非常特殊的条件,不能100%确定,例如TBB可以添加“更多”内容。有N个运行线程和一个同步工作队列(使用pthread互斥量)。我们的工作具有优先级(int)。作业被放入队列,空闲线程获得优先级最高的作业。重复此过程直到队列为空。好吧,现在,我想知道TBB(线程构建block)之类的框架是否可以为这种特殊情况提供更多功能算法观点??(所以,内部...) 最佳答案 TBB4提供了一个concurrent_priority_queue(在referencemanual中搜索“prior

c++ - 使用 tbb 并行多个嵌套循环

用tbb并行三个嵌套独立循环的最佳方法是什么?for(inti=0;i 最佳答案 TBB中的嵌套循环基本上有两种方式。由于TBB被设计为完美支持嵌套并行性,因此只需编写嵌套并行for:tbb::parallel_for(0,100,[](inti){tbb::parallel_for(0,100,[](intj){tbb::parallel_for(0,100,[](intk){printf("HelloWorld%d/%d/%d\n",i,j,k);});});});当循环属于不同的模块或/和库时,此变体效果很好。否则,使用blo

c++ - 英特尔 TBB 中的原子 double / float

根据文档,atomic支持整数类型的T,枚举类型,或者指针类型。英特尔TBB是否正式支持float/double?我看过一些补丁here和RafSchietekathere,它可能/可能没有被合并到最新的4.0版本中。从我通读的补丁中,我注意到的唯一主要区别是将reinterpret_cast从整数类型添加到float/double。如果有人能澄清这一点,我将不胜感激。谢谢! 最佳答案 您可以轻松添加对基于64位和32位原子整数构建的float的支持。原子加载/存储/交换可以使用reinterpret_cast作为直接包装器实现,原

c++ - pthread 与英特尔 TBB 及其与 OpenMP 的关系?

对于多线程编程,考虑到与HPC应用程序(MPI)的结合,哪个更好,是否可以说在功能上,IntelTBB(threadbuildingblock)与pthread不相上下?我只获得了openmp的经验,但我听说与openmp相比,TBB和Pthread都提供了更精细的线程控制,但是与pthread相比,TBB或TBB+OpenMP能否提供类似的功能? 最佳答案 pthread是操作系统基础设施之上的一个瘦包装器。它允许您使用给定的线程主函数和一些同步原语(互斥信号量等)创建线程。在Linux下,pthread是在clone(2)系统调

c++ - 为什么我不能为 tbb HashMap 中的同一元素设置两个访问器?

在下面的代码中,如果我不释放a1,代码似乎会陷入map.find函数内的无限循环。如果我需要在应用程序的两个不同部分搜索一个元素怎么办?#include#include"tbb/concurrent_hash_map.h"usingnamespacestd;usingnamespacetbb;voidmain(){concurrent_hash_mapmap;concurrent_hash_map::accessora1,a2;map.insert(make_pair(1,111));cout 最佳答案 访问器允许写访问。这意味着一

c++ - TBB 并发 HashMap

我正在实现tbb的并发HashMap,以将其性能与一组其他并发哈希表进行比较。但是我从中得到的性能是可怕的,我简直不敢相信它比其他并发哈希表慢这是我的实现:classTBB:publicTestDs{typedeftbb::concurrent_hash_map>hash_t;private:hash_t_ds;public:TBB(constConfiguration&config):_ds(config.initial_count){}boolcontainsKey(intkey){hash_t::accessora;if(_ds.find(a,key)){returntrue;}

c++ - 自定义迭代器适用于 std::sort 但不适用于 tbb::parallel_sort?

我正在尝试使用tbb::parallel_sort同时对2个数组进行排序。英特尔的文档在这里说https://software.intel.com/en-us/node/506167对迭代器和序列的要求与std::sort相同。。似乎并非如此。我的自定义迭代器与std::sort一起工作得很好,但与tbb::parallel_sort一起产生编译错误。请看下面的代码:intmain()//needsboostandtbbtocompile{intvalues_size=6;intnums1[]={5,8,7,89,56,4};intnums2[]={2,1,1,4,9,2};//WOR

c++ - 使用 clang 的 ThreadSanitizer 和 TBB 避免误报

有没有人试过clang'sThreadSanitizer与IntelThreadingBuildingBlocks(TBB)?到目前为止,我的经验是您会收到很多警告,即使对于相对简单的示例也是如此。不幸的是,其中许多似乎是误报。在thisanswer对于另一个ThreadSanitizer问题,建议使用抑制文件。这有帮助吗?是否有针对TBB或任何其他技术的抑制文件?(旁注:使用Helgrind,它看起来很相似。许多误报。) 最佳答案 当我在TSAN_OPTIONS中引用抑制文件时,我才让它工作。至少对我而言,仅在编译期间使用-fsa